<?php

namespace App\Http\Controllers;

use App\Blog;
use App\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //获取所有用户的数据
//        $users = User::get();
        //获取分页的数据,用下面的方法,使用了paginate方法,不能再使用get
        $users = User::paginate(5);
        //加载用户管理列表模板
        return view('user.index',compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //通过$id找到当前用户的数据
        $user = User::find($id);
        //找到当前用户发布的所有博客内容
//        $blogs = Blog::where('uid',$user['id'])->get();
//        dd($blogs->toArray());
        $blogs = $user->blog;
        //加载展示用户模板
        return view('user.show',compact('user','blogs'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //$id就是被点击的需要编辑的用户主键id
        //可以使用$id的值去找到当前用户的数据
        $user = User::find($id);
        //进入修改用户数据方法之后,应该先判断当前用户是否有权限,如果有权限,继续往下执行,如果没权限,直接停止()
        //第一个参数是调用的权限策略的方法名称
        //第二个参数是需要操作的用户数据对象
        $this->authorize('update',$user);
        //加载编辑用户资料模板
        return view('user.edit',compact('user'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {

        //如果调用资源控制器的update方法,必须使用put或者patch请求方式来请求,但是html默认是不能生成该请求方式,所以需要在请求的模板内调用@method()伪造表单的方式来伪造一个put请求,才能满足laravel框架所要求的访问update方法的请求方式
        //找到当前$id对应的用户数据
        $user = User::find($id);
        //接收post数据
        $post = $request->all();
        $user->nickname = $post['nickname'];
        //判断密码是否填写,如果填写了密码,将用户的密码修改
        if ($post['password']){
            $user->password = bcrypt($post['password']);
        }
        //将用户数据保存
        $user->save();
        //设置闪存信息并返回
        session()->flash('success','资料修改成功');
        return redirect()->route('user.index');

    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //通过对应$id找到需要删除的用户数据
        $user = User::find($id);
        //用权限策略进行能否删除操作的判断,
        $this->authorize('delete',$user);
        //将对应数据删除
        //删除方法1:使用找到的数据对象调用delete方法删除
//        $user->delete();
        //删除方法2:直接使用模型调用destroy方法删除,调用该方法的时候,需要给destroy方法传递你要删除的数据的主键id
        User::destroy($id);
        //设置闪存信息并跳转
        session()->flash('success','用户数据删除成功');
        return redirect()->route('user.index');
    }
}
